#include "atomic_0822_data_collection_service.h"

// 初始化随机数种子
static bool is_random_seeded = false;
static void seedRandom() {
    if (!is_random_seeded) {
        std::srand(std::time(nullptr));
        is_random_seeded = true;
    }
}

/**
 * @brief 采集数据实现函数
 * @param input 输入参数结构体指针
 * @param output 输出结果结构体指针
 * @return 执行状态码（ATOMIC_SERVICE_SUCCESS为成功，其他为错误码）
 */
int collectData(DataCollectionInput *input, DataCollectionOutput *output) {
    // 参数合法性检查
    if (input == nullptr || output == nullptr) {
        return ATOMIC_SERVICE_ERROR; // 无效参数错误
    }

    // 检查输入参数有效性
    if (input->device_id <= 0) {
        return ATOMIC_SERVICE_NOT_READY; // 设备ID无效
    }
    if (input->sample_rate <= 0) {
        return ATOMIC_SERVICE_NOT_SUPPORT; // 采样率不支持
    }
    if (input->data_length <= 0) {
        return ATOMIC_SERVICE_NOT_SUPPORT; // 数据长度不支持
    }

    // 初始化随机数生成器
    seedRandom();

    // 填充输出结构体基本信息
    output->device_id = input->device_id;
    output->real_time_mode = input->real_time_mode;

    // 根据采集类型设置信号类型和算法类型（示例映射关系）
    switch (input->collect_type) {
        case 0: // 假设0为温度采集
            output->signal_type = 0;
            output->algo_type = 1; // 假设使用均值滤波算法
            output->window_size = 5;
            break;
        case 1: // 假设1为压力采集
            output->signal_type = 1;
            output->algo_type = 2; // 假设使用限幅算法
            output->min_threshold = 0.0;
            output->max_threshold = 100.0;
            break;
        default: // 默认类型
            output->signal_type = 4;
            output->algo_type = 0; // 无预处理
            output->window_size = 1;
            output->min_threshold = 0.0;
            output->max_threshold = 0.0;
            break;
    }

    // 生成模拟原始数据（0-100之间的随机数）
    output->raw_val1 = static_cast<double>(std::rand() % 1000) / 10.0;
    output->raw_val2 = static_cast<double>(std::rand() % 1000) / 10.0;
    output->raw_val3 = static_cast<double>(std::rand() % 1000) / 10.0;

    // 有效数据数量（不超过期望长度）
    output->valid_count = std::min(input->data_length, 1024); // 假设最大有效长度为1024

    return ATOMIC_SERVICE_SUCCESS; // 采集成功
}